package org.gwc.advice;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @Around:一个方法里可以包含四个周期的功能
 * ProceedingJoinPoint 对比 JoinPoint,其需要自己手动执行目标方法
 * 必须有返回值和抛出异常，否则调用者接受不到信息
 */

//@Component
//@Aspect
public class TxAroundAdvice {

    @Around("org.gwc.advice.MyPointCut.myPC()")
    public Object transaction(ProceedingJoinPoint joinPoint){


        // 保证方法被执行
        Object[] args = joinPoint.getArgs();
        Object result = null;
        try {
            Object proceed = joinPoint.proceed(args);
        } catch (Throwable e){
            // 必须在这里抛出异常，否则外边接收不到
            System.out.println("事务回滚");
            throw new RuntimeException(e);
        } finally {

        }
        return result;


    }
}
